// 最长公共子序列其中一个结果
// 给定两个字符串str1和str2
// 输出两个字符串的最长公共子序列
// 如果最长公共子序列为空，则输出-1
// 测试链接 : https://www.nowcoder.com/practice/4727c06b9ee9446cab2e859b4bb86bb8
// 提交以下的code，可以直接通过

#include <bits/stdc++.h>

using namespace std;

const int MAXN = 5001;
int f[MAXN][MAXN];
char ans[MAXN];
string s1, s2;
int n, m, k;

void dp()
{
    for(int i = 1; i <= n; ++i)
    {
        for(int j = 1; j <= m; ++j)
        {
            if(s1[i - 1] == s2[j - 1])
                f[i][j] = f[i - 1][j - 1] + 1;
            else
                f[i][j] = max(f[i - 1][j], f[i][j - 1]);
        }
    }
}

// 讲解067 - 题目3，最长公共子序列长度
void lcs()
{
    dp();
    k = f[n][m];
    // 收集答案
    if(k > 0)
    {
        for(int len = k, i = n, j = m; len > 0;)
        {
            if(s1[i - 1] == s2[j - 1])
            {
                ans[--len] = s1[i - 1];
                --i, --j;
            }
            else
            {
                if(f[i - 1][j] >= f[i][j - 1]) --i;
                else --j;
            }
        }
    }
}

int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);

    cin >> s1 >> s2;
    n = s1.size(), m = s2.size();
    lcs();
    if(k == 0) puts("-1");
    else
    {
        for(int i = 0; i < k; ++i)
        {
            printf("%c", ans[i]);
        }
    }
    printf("\n");

    return 0;
}